Documentacion con Swagger SpringFox

Descripcion

Como crear documentacion de una API Rest con Swagger Springfox version: 2.9.2

Pagina referencia: SpringFox 2.9.2

Dependencias

Para utilizar Swagger tenemos que añadir las siguientes dependencias en el archivo pom.xml:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
Metodo

Una vez tenemos definidas las dependencias dentro de la carpeta configuration de nuestro proyecto creamos un archivo SwaggerSpringFoxConfig.java, con el siguiente contenido:

package main.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration
@EnableSwagger2
public class SwaggerSpringFoxConfig {

	@Bean
	public Docket api() {

		return new Docket(DocumentationType.SWAGGER_2)
			.apiInfo(getApiInfo())
			.select()
			.apis(RequestHandlerSelectors.basePackage("main.controllers"))
			.paths(PathSelectors.any())
			.build();
	}

	private ApiInfo getApiInfo() {

		return new ApiInfoBuilder()
			.title("Skill Matrix")
			.version("1.0.0")
			.contact(
				new Contact("Softwareone", "https://www.softwareone.com/es-es/", "manuel.bascoy@softwareone.com"))
			.build();

	}
}

Aqui tenemos que modificar RequestHandlerSelectors.basePackage("main.controllers") en vez de main.controllers tendriamos que poner el paquete donde estan los controladores de nuestra API Rest

y en la funciona getApiInfo cambiaríamos .title, .version y .contact para poner nuestros datos

Anotaciones

Las anotaciones que podemos usar con Swagger para documentar nuestra API son las siguientes:

Codigos ejemplo:

@GetMapping("/members")
@ApiOperation(value = "Returns a list with all members.", notes = "The list of members returned includes all the skills and languages related to the member.")
@ApiResponses(value = { @ApiResponse(code = 200, message = Constants.CODE200, response = MemberData.class),
                @ApiResponse(code = 400, message = Constants.CODE400),
                @ApiResponse(code = 500, message = Constants.CODE500) })
public List<MemberData> getMembers(
                @ApiParam(value = "[Optional] idSkill param for skill query.", example = "12") @RequestParam(required = false) Long idSkill,
                @ApiParam(value = "[Optional | Requires idSkill] idSkillLevel param for skill level query, idSkill param required.", example = "12") @RequestParam(required = false) Long idSkillLevel,
                @ApiParam(value = "[Optional] name param for name query.") @RequestParam(required = false) String name,
                @ApiParam(value = "[Optional] role param for job query.") @RequestParam(required = false) String role,
                @ApiParam(value = "[Optional] idLanguage param for language query.", example = "12") @RequestParam(required = false) Long idLanguage,
                @ApiParam(value = "[Optional | Requires idLanguage] idLanguageLevel param for language level query, idLanguage param required.", example = "12") @RequestParam(required = false) Long idLanguageLevel)
                throws ValidationException {
        List<MemberData> listMemberData = memberQueryService.getAll(idSkill, idSkillLevel, name, role,
                        idLanguage, idLanguageLevel);
        return listMemberData;
}
@ApiModel(description = "Stores all the attributes required for the /api/members endpoint.")
public class MemberData {

	@ApiModelProperty(position = 0, hidden = true)
	@JsonInclude(Include.NON_NULL)
	private Long id;
Tags

Spring | Swagger | Documentacion